package com.shxy.service;

import com.shxy.controller.ui.Pageable;
import com.shxy.entity.base.College;
import com.shxy.entity.base.Major;
import com.shxy.entity.custom.CustomClazz;
import com.shxy.entity.custom.CustomStudent;
import org.springframework.cache.annotation.Cacheable;

import java.util.List;
import java.util.Optional;

/**
 * 信息查询接口
 */
public interface IQueryService {

    /**
     * 查询全部学院信息
     * @return
     */
    @Cacheable(cacheNames = "colleges_all")
    List<College> getCollegesAll();

    /**
     * 查询全部专业信息
     * @return
     */
    @Cacheable(cacheNames = "majors_all")
    List<Major> getMajorsAll();

    /**
     * 根据学院和学院查询开设专业列表
     * @param collegeId
     * @param year
     * @return
     */
    @Cacheable(cacheNames = "majors_college_year")
    List<Major> getMajorsByCollegeAndYear(int collegeId, String year);

    /**
     * 根据学年和专业查询班级
     * @param majorId
     * @param year
     * @return
     */
    List<CustomClazz> getClazzsByMajorAndYear(int majorId, String year);

    /**
     * 根据班号查询学生列表
     * @param clazzId
     * @return
     */
    List<CustomStudent> getStusByClazz(int clazzId);

    /**
     * 根据条件查询学生列表
     * @param year
     * @param collegeId
     * @param majorId
     * @param clazzId
     * @param page
     * @param size
     * @return
     */
    Pageable queryStusList(String year, int collegeId, int majorId, int clazzId, int page, int size);

    /**
     * 根据学号查询学生信息
     * @param code
     * @return
     */
    Optional<CustomStudent> getStuByCode(String code);

    /**
     * 查询全部班级
     * @return
     */
    List<CustomClazz> getClazzsAll();

    /**
     * 查询指定年级的学生
     * @param year
     * @return
     */

    @Cacheable(cacheNames = "stus_of_year")
    List<CustomStudent> getStusByYear(String year);
}
